<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class User extends AppController
{
	public function __construct(){
		parent::__construct();
	}
	
	public function index(){
	
	}
	
	public function admin_index($sortBy = 'id',$sortOrder ='desc'){
		$pag = array(
			'uri_segment'=>6,
			'sort'=>true,
			'per_page'=>10,
			'sortList'=>array('stt'=>'id','Tên Người Dùng'=>'username','Mật Khẩu'=>'password','Đặc Quyền'=>'role','Trạng thái'=>'status','Ngày Đăng Ký'=>'date'),
			'base_url'=>'/admin/user/index',
			'sortBy'=>$sortBy,
			'sortOrder'=>$sortOrder
			);
		$pag =$this->paginate($pag);
		$pag['total_rows'] = $this->getEM()->getRepository('Entity\ShUser')->total_rows($pag);
		$this->pagination->initialize($pag);
		$this->data['pagination_link'] = $this->pagination->create_links();
		$this->data['user']= $this->getEM()->getRepository('Entity\ShUser')->backendPaginate($pag);
		$this->render('user/admin_index');
	}
	public function mod_index($sortBy = 'id',$sortOrder ='desc'){
		$pag = array(
			'uri_segment'=>6,
			'sort'=>true,
			'per_page'=>10,
			'sortList'=>array('stt'=>'id','Tên Người Dùng'=>'username','Mật Khẩu'=>'password','Đặc Quyền'=>'role','Trạng thái'=>'status','Ngày Đăng Ký'=>'date'),
			'base_url'=>'/mod/user/index',
			'sortBy'=>$sortBy,
			'sortOrder'=>$sortOrder
			);
		$pag =$this->paginate($pag);
		$pag['total_rows'] = $this->getEM()->getRepository('Entity\ShUser')->total_rows($pag);
		$this->pagination->initialize($pag);
		$this->data['pagination_link'] = $this->pagination->create_links();
		$this->data['user']= $this->getEM()->getRepository('Entity\ShUser')->backendPaginate($pag);
		$this->render('user/mod_index');
	}
	public function admin_add(){
		$this->user_add();
		$this->data['breadcrumb'] = array(
			'Người Dùng' => base_url('/admin/user'),
			'Thêm Người Dùng'=> null
			);
		$this->render('user/admin_add',
			array('jquery.sceditor.bbcode.min','language/vi','sceditor','thumbnail-module'),
			array('default.min','tabs')
			);
	}
	public function mod_add(){
		$this->validation();

		if($this->input->post() /*&& $this->form_validation->run('users')*/):
			if($this->getEM()->getRepository('Entity\ShUser')->addUser($this->input)):
				$this->log(11,array($this->data['user']));
				$this->session->set_flashdata('success','Thêm người dùng thành công');
			redirect('/admin/user');
			else:
				$this->data['flash'] = array('error'=>'Lỗi sql, thử lại');
			endif;
		endif;
		$this->data['breadcrumb'] = array(
			'Người Dùng' => base_url('/admin/user'),
			'Thêm Người Dùng'=> null
			);
		$this->render('user/admin_add',
			array('jquery.sceditor.bbcode.min','language/vi','sceditor','thumbnail-module'),
			array('default.min','tabs')
			);
	}
	private function user_add(){
		$this->validation();

		if($this->input->post() /*&& $this->form_validation->run('users')*/):
			if($this->getEM()->getRepository('Entity\ShUser')->addUser($this->input)):
				$this->log(11,array($this->data['user']));
				$this->session->set_flashdata('success','Thêm người dùng thành công');
			redirect('/admin/user');
			else:
				$this->data['flash'] = array('error'=>'Lỗi sql, thử lại');
			endif;
		endif;
			return true;
	}
	public function admin_edit($id=NULL){
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai Mã Người Dùng');
		redirect('/admin/user');
		endif;

		$this->user_edit($id);
		$this->render('user/admin_edit');
	}
	public function mod_edit($id = NULL){
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai Mã Người Dùng');
		redirect('/mod/user');
		endif;

		$repo = $this->getEM()->getRepository('Entity\ShUser');
		$this->data['user'] = $repo->findOneById($id);
		if(empty($this->data['user'])):
			$this->session->set_flashdata('error','Không Có Người Dùng Này');
		redirect('/mod/user');
		endif;

		$this->validation();
		if($this->input->post() /*&& $this->form_validation->run('user')*/):
			$user = $this->getEM()->getRepository('Entity\ShUser')->updateUser($this->input,$this->data['user']);
		if($user):
			$this->log(11,array($this->data['user']));
			$this->session->set_flashdata('success','Sửa Thông Tin Thành Công');
		redirect('/mod/user');
		else:
			$this->data['flash'] = array('error'=>'Lỗi Sql, Thử lại');
		endif;
		endif;
		$this->render('user/mod_edit');
	}
	private function user_edit($id,$url = 'admin'){
		$repo = $this->getEM()->getRepository('Entity\ShUser');
		$this->data['user'] = $repo->findOneById($id);
		if(empty($this->data['user'])):
			$this->session->set_flashdata('error','Không Có Người Dùng Này');
		redirect('/'.$url.'/user');
		endif;

		$this->validation();
		if($this->input->post() /*&& $this->form_validation->run('user')*/):
			$user = $this->getEM()->getRepository('Entity\ShUser')->updateUser($this->input,$this->data['user']);
		if($user):
			$this->log(11,array($this->data['user']));
			$this->session->set_flashdata('success','Sửa Thông Tin Thành Công');
		redirect('/'.$url.'/user');
		else:
			$this->data['flash'] = array('error'=>'Lỗi Sql, Thử lại');
		endif;
		endif;
	}
	public function admin_delete($id=NULL){
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai mã người dùng');
		redirect('/admin/user');
		endif;

		$this->user_delete($id);
		//breadcrumb
		$this->render('user/admin_delete');

	}
	public function mod_delete($id = NULL){
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai mã người dùng');
		redirect('/mod/user');
		endif;

		$this->data['user'] = $this->getEM()->getRepository('Entity\ShUser')->findOneById($id);
		if(empty($this->data['user'])):
			$this->session->set_flashdata('error','Không Có Người dùng này');
		redirect('/mod/user');
		endif;
		$this->validation();
		if($this->input->post() /*&& $this->form_validation->run('user')*/):
			if($this->getEM()->getRepository('Entity\ShUser')->deleteUser($this->data['user'])):
				$this->log(1,array($this->data['user']));
				$this->session->set_flashdata('success','Xóa Người Dùng Thành Công');
			redirect('/mod/user');
			else:
				$this->data['flash'] = array('error','Lỗi Sql, Thử lại');
			endif;
		endif;
		$this->render('user/mod_delete');
	}
	private function user_delete($id,$url='admin'){
		$this->data['user'] = $this->getEM()->getRepository('Entity\ShUser')->findOneById($id);
		if(empty($this->data['user'])):
			$this->session->set_flashdata('error','Không Có Người dùng này');
		redirect('/'.$url.'/user');
		endif;


		$this->validation();
		if($this->input->post() /*&& $this->form_validation->run('user')*/):
			if($this->getEM()->getRepository('Entity\ShUser')->deleteUser($this->data['user'])):
				$this->log(1,array($this->data['user']));
				$this->session->set_flashdata('success','Xóa Người Dùng Thành Công');
			redirect('/'.$url.'/user');
			else:
				$this->data['flash'] = array('error','Lỗi Sql, Thử lại');
			endif;
		endif;
	}
	public function login(){
		if($this->session->userdata('login'))
			redirect('/');
		
		$this->validation();
		
		if($this->input->post() && $this->form_validation->run('login')):
			$data = $this->input->post();
			$user = $this->getEM()->getRepository('Entity\ShUser')->login($data);
			
			if($user):
				$data = array(
					'username' => html_escape($user->getUsername()),
					'uid' => $user->getId(),
					'role' => $user->getRole(),
					'login' => true
				);
				$this->session->set_userdata($data);
				if($this->session->userdata('role')==3):
				redirect('/admin/page');
			    else:
			    	redirect('/mod/page');
			    endif;
			else:
				$this->data['flash'] = array('error' => 'Không có tài khoản này, nhập lại');
			endif;
		endif;
		
		$this->render('user/login');
	}
	
	public function register(){
		if($this->session->userdata('login'))
			redirect('/');
		
		$this->validation();
		if($this->input->post() && $this->form_validation->run('register')):
			try {
				$user = $this->getEM()->getRepository('Entity\ShUser')->register($this->input);
				if($user):
					$data = array(
						'username' => html_escape($user->getUsername()),
						'uid' => $user->getId(),
						'role' => $user->getRole(),
						'login' => true
					);
					$this->session->set_userdata($data);
				endif;
				$this->session->set_flashdata('error','Đăng ký thành công');
				redirect('/');
			} catch (Exception $e) {
				$this->data['flash'] = array('error' => $e->getMessage());
			}
		endif;
		
		$this->render('user/register');
	}

	public function logout(){
		$this->session->sess_destroy();
		redirect('/');
	}
	public function admin_shutdown($id)
	{
		$em = $this->getEM();
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai mã người dùng');
		redirect('/admin/user');
		endif;

		$u = $this->getEM()->getRepository('Entity\ShUser')->findOneById($id);
		if(empty($u)):
			$this->session->set_flashdata('error','Không Có Người Dùng này');
		redirect('/admin/user');
		endif;

		$status = $u->getStatus();
		$u->setStatus(!$status);
		$this->getEM()->persist($u);
		$this->getEM()->flush();

		$this->log(11,array($this->data['user']));
		redirect('/admin/user');
	}
	public function mod_shutdown($id){
		$em = $this->getEM();
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai mã người dùng');
		redirect('/mod/user');
		endif;

		$u = $this->getEM()->getRepository('Entity\ShUser')->findOneById($id);
		if(empty($u)):
			$this->session->set_flashdata('error','Không Có Người Dùng này');
		redirect('/mod/user');
		endif;

		$status = $u->getStatus();
		$u->setStatus(!$status);
		$this->getEM()->persist($u);
		$this->getEM()->flush();

		$this->log(11,array($this->data['user']));
		redirect('/mod/user');
	}
	public function admin_view($id = null){
		$id = (int)$id;
		if(empty($id) || !is_int($id)):
			$this->session->set_flashdata('error','Sai mã người dùng');
		redirect('admin/user');
		endif;

		$user = $this->getEM()->getRepository('Entity\ShUser')->findOneById($id);
		if(empty($user)):
			$this->session->set_flashdata('error','Không có người dùng này');
		redirect('admin/user');
		endif;

		$this->data['vuser'] = $this->getEM()->getRepository('Entity\ShUser')->getAllBy($user);
		$this->render('user/admin_view');
		
	}
	
}